package com.itlong.cloud.property.service;

import com.itlong.cloud.POJO.DTO.property.PropertyFunctionGetPageDTO;
import com.itlong.cloud.POJO.PO.PropertyFunctionPO;
import com.itlong.cloud.POJO.VO.property.PropertyFunctionVO;
import com.itlong.cloud.utils.page.Page;

import java.util.List;

/**
 * <desc>
 *      物业-菜单资源业务处理接口
 * </desc>
 *
 * @createDate 2017/09/21
 */
public interface IPropertyFunctionService {
    /**
     * <desc>
     *      保存资源
     * </desc>
     *
     * @param propertyFunctionPO 资源实体
     * @return sql执行行数
     * @author Biao.R
     * @createDate 2017/10/09
     */
    Integer save(PropertyFunctionPO propertyFunctionPO) throws Exception;
    /**
     * <desc>
     *      更新资源
     * </desc>
     *
     * @param propertyFunctionPO 资源实体
     * @return sql执行行数
     * @author Biao.R
     * @createDate 2017/10/09
     */
    Integer update(PropertyFunctionPO propertyFunctionPO) throws Exception;
    /**
     * <desc>
     *      通过id获取资源
     * </desc>
     *
     * @param propertyFunctionPO 资源实体
     * @return 资源实体
     * @author Biao.R
     * @createDate 2017/10/09
     */
    PropertyFunctionPO getOne(PropertyFunctionPO propertyFunctionPO);

    /**
     * <desc>
     *      获取所有资源
     * </desc>
     * @return 资源实体集合
     * @author Biao.R
     * @createDate 2017/10/09
     */
    List<PropertyFunctionPO> getList();

    /**
     * <desc>
     *      获取分页数据
     * </desc>
     * @param pageDTO 查询参数DTO
     * @return page模型
     * @author Biao.R
     * @createDate 2017/10/09
     */
    Page<PropertyFunctionPO> getPage(PropertyFunctionGetPageDTO pageDTO) throws Exception;

    /**
     * <desc>
     *      删除资源
     * </desc>
     * @param functionIds 资源id数组
     * @return sql执行行数
     * @author Biao.R
     * @createDate 2017/10/09
     */
    Integer delete(String functionIds);

    /**
     * <desc>
     *      根据parent获取下级资源
     * </desc>
     * @param functionId 资源id
     * @return 子级结果集
     * @author Biao.R
     * @createDate 2017/10/09
     */
    List<PropertyFunctionVO> getChilds(String functionId);

    /**
     * <desc>
     *      获取分配菜单所有节点
     * </desc>
     * @return
     * @author Biao.R
     * @createDate 2017/10/09
     */
    List<PropertyFunctionVO> getAllotFunction(String roleId,String projectId);

    /**
     * <desc>
     *      通过角色id及项目id获取该角色拥有的所有节点ID
     * </desc>
     *
     * @param roleId 角色id
     * @param projectId 项目id
     * @return
     * @author Chunjian.G
     * @createDate 2018-01-15
     */
    List<String> getFunctionIdsByRoleProject(String roleId, String projectId) throws Exception;

    /**
     * <desc>
     *      获取当前节点的父级节点以及同级别所有父级节点
     * </desc>
     * @param functionId 资源id
     * @return
     * @author Biao.R
     * @createDate 2017/10/09
     */
    List<PropertyFunctionPO> getParentLevelFunctions(String functionId);

    /**
     * <desc>
     *      1.6版本菜单变更
     * </desc>
     *
     * @return
     * @author Jiaqi.X
     * @createDate 2018/04/18
     */
    public Boolean handleV16FunctionUpdate();

    /**
     * <desc>
     *      获取套餐功能
     * </desc>
     *
     * @param propertyPackageId 物业套餐id
     * @return
     * @Author Zhu.yj
     * @createDate  2020/3/25
     */
    List<PropertyFunctionVO> getPackageFunction(String propertyPackageId) throws Exception;
}
